package cn.sdstudio.mapper;

import cn.sdstudio.model.BaseEntity;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Collection;
import java.util.List;

/**
 * 自定义Mapper接口，扩展MyBatis Plus功能
 */
@Mapper
public interface BaseMapperX<T extends BaseEntity> extends BaseMapper<T> {

    /**
     * 批量插入
     */
    int batchInsert(@Param("list") Collection<T> list);

    /**
     * 根据ID查询（带悲观锁）
     */
    T selectByIdForUpdate(@Param("id") Long id);

    /**
     * 分页查询（自定义排序）
     */
    <P extends IPage<T>> P selectPageOrder(P page, @Param(Constants.WRAPPER) String orderBy);

    /**
     * 根据ID列表查询
     */
    default List<T> selectByIds(Collection<Long> ids) {
        return selectBatchIds(ids);
    }
}
